package com.ruoyi.training.mapper;

import java.util.List;

import com.ruoyi.examination.domain.PaperConfig;
import com.ruoyi.training.domain.ClassStudent;
import org.apache.ibatis.annotations.Param;

/**
 * 班级学员明细Mapper接口
 *
 * @author WorrilessGo
 * @date 2025-09-24
 */
public interface ClassStudentMapper {
    /**
     * 查询班级学员明细
     *
     * @param classStudentId 班级学员明细主键
     * @return 班级学员明细
     */
    public ClassStudent selectClassStudentByClassStudentId(String classStudentId);

    /**
     * 查询班级学员明细列表
     *
     * @param classStudent 班级学员明细
     * @return 班级学员明细集合
     */
    public List<ClassStudent> selectClassStudentList(ClassStudent classStudent);

    /**
     * 新增班级学员明细
     *
     * @param classStudent 班级学员明细
     * @return 结果
     */
    public int insertClassStudent(ClassStudent classStudent);

    /**
     * 修改班级学员明细
     *
     * @param classStudent 班级学员明细
     * @return 结果
     */
    public int updateClassStudent(ClassStudent classStudent);

    /**
     * 删除班级学员明细
     *
     * @param classStudentId 班级学员明细主键
     * @return 结果
     */
    public int deleteClassStudentByClassStudentId(String classStudentId);

    /**
     * 批量删除班级学员明细
     *
     * @param classStudentIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteClassStudentByClassStudentIds(String[] classStudentIds);

    /**
     * 根据班级ID查询在班学员的报名信息
     * lqx
     *
     * @param trainingClassId 班级ID
     * @return 班级学员列表
     */
    public List<ClassStudent> selectClassStudentsByClassId(String trainingClassId);

    /**
     * 批量插入班级学员
     *
     * @param classStudentList 班级学员列表
     * @return 结果
     */
    public int batchInsert(List<ClassStudent> classStudentList);

    /**
     * 批量更新学员状态（退班）
     *
     * @param classStudentList 班级学员列表
     * @return 结果
     */
    public int batchUpdateStatus(List<ClassStudent> classStudentList);

    /**
     * 通过班级id获取学员id
     * lqx
     */
    public List<String> selectStudentIdsByClassId(@Param("classId") String classId);

    /**
     * 通过学员id获取班级id
     * lqx
     */
    public List<String> selectClassIdsByStudentId(@Param("studentId") String studentId);

    /**
     * 通过班级id和项目id获取学员id
     * lqx
     */
    public List<String> selectStudentIdsByClassIdAndProjectId(@Param("trainingClassId") String trainingClassId,
                                                              @Param("trainingProjectId") String trainingProjectId);

    /**
     * 通过班级id和项目id获取报名id
     * lqx
     */
    public List<String> selectRegistrationIdsByClassIdAndProjectId(@Param("trainingClassId") String trainingClassId,
                                                              @Param("trainingProjectId") String trainingProjectId);

    /**
     * 通过班级id和学员id获取学员信息
     * lqx
     */
    public ClassStudent selectClassStudentsByCondition(@Param("trainingClassId") String trainingClassId, @Param("studentId") String studentId);

    /**
     * 修改班级学员排考状态
     * */
    public int batchUpdateExamStatus( @Param("trainingClassId") String trainingClassId,
                                      @Param("registrationIds") List<String> registrationIds,
                                      @Param("examStatus") String examStatus,
                                      @Param("examScheduleId") String examScheduleId);

    public PaperConfig selectPaperConfigByPaperConfigId(@Param("paperConfigId") String paperConfigId);

    /**
     * 通过班级id获取班级培训人员数量
     * lqx
     * */
    public int selectStudentNumByClassId(String trainingClassId);

    //通过报名id在班级学员表中查询
    public ClassStudent selectClassStudentsByRegistrationId(String registrationId);

    //修改班级学员表中对应学员的考试安排状态("0")和考试安排id(null)
    public int batchUpdateExamStatusByExamScheduleIdsAndClassId(@Param("trainingClassId")String trainingClassId,
                                                                 @Param("examScheduleIds")List<String> examScheduleIds,
                                                                 @Param("examStatus")String examStatus,
                                                                 @Param("examScheduleId")String examScheduleId);

    /**
     * 通过学员id和班级id获取学员的考试安排情况
     * lqx
     */
    public List<ClassStudent> selectClassStudentByStudentIdAndClassId(@Param("studentId") String studentId,
                                                            @Param("trainingClassId") String trainingClassId);

    /**
     * 通过学员id获取学员的考试情况
     * lqx
     */
    public List<ClassStudent> selectClassStudentByStudentId(@Param("studentId") String studentId);
}
